package com.example.houselease.mapper;

import com.example.houselease.pojo.dto.admin.AdminRoleDTO;
import com.example.houselease.pojo.entity.Admin;
import com.example.houselease.pojo.vo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 管理员 mapper
 * @author sf
 * @version 0.0.1
 * */
@Repository
public interface AdminMapper {

    /**
     * 通过用户名查询数据
     * @param username 用户名
     * @return 数据
     * */
    AdminLoginInfoVO selectLoginInfoByUsername(String username);

    /**
     * 管理员列表
     * @return 数据
     * */
    List<AdminListVO> select();

    /**
     * 通过用户名查询数据个数
     * @param username 用户名
     * @return 数据个数
     * */
    int countByUsername(String username);

    /**
     * 通过手机号查询数据个数
     * @param phone 用户名
     * @return 数据个数
     * */
    int countByPhone(String phone);

    /**
     * 通过邮箱查询数据个数
     * @param email 用户名
     * @return 数据个数
     * */
    int countByEmail(String email);

    /**
     * 添加管理员
     * @return 添加好的管理员数据
     * */
    int insert(Admin admin);

    /**
     * 添加管理员所属的角色
     * @param roleIds 角色id列表数据
     * @param adminId 管理员id
     * */
    int insertRole(@Param("adminId") Long adminId, @Param("roleIds") List<Long> roleIds);

    /**
     * 通过id查询管理员数据
     * @param id 数据id
     * */
    AdminDetailVO selectById(Long id);

    /**
     * 通过管理员id查询角色信息
     * @param id 管理员id
     * @return 数据
     * */
    List<RoleDetailVO> selectRoleByAdminId(Long id);

    /**
     * 通过管理员id，查询管理员角色信息
     * @param id 管理员id
     * */
    List<AdminRoleListVO> selectRolesByAdminId(Long id);


    /**
     * 添加管理员拥有的角色
     * @param enableIds 角色id
     * @param adminId 管理员id
     * */
    int insertRoleByRoleIds(@Param("adminId") Long adminId, @Param("list") List<Long> enableIds);

    /**
     * 修改管理员拥有的角色状态信息
     * @param adminId 管理员id
     * @param disableIds 角色id列表
     * */
    int updateAdminRoleByRoleIds(@Param("adminId") Long adminId,@Param("list") List<Long> disableIds);

    /**
     * 修改管理员拥有的角色状态
     * @param adminId 管理员id
     * @param roleId 角色id
     * */
    void updateAdminRole(Long adminId, Long roleId);

    /**
     * 通过管理员id删除数据
     * @param id 管理员id
     * */
    int deleteById(Long id);

    /**
     * 启用管理员
     * @param id 管理员id
     * */
    int updateAdminEnable(Long id);

    /**
     * 禁用管理员
     * @param id 管理员id
     * */
    int updateAdminDisable(Long id);

    /**
     * 修改管理员
     * @param admin 数据
     * */
    int update(Admin admin);
}
